from flask_jwt_extended import get_jwt_identity, get_jwt
from typing import List, Union

from app1.models import Zbfwbuser, Zbfwbuserrole, Zbfwbroleperm


def format_response(data=None, count=0, result=1, result_text=""):
    if data is None:
        data = []
    return {
        "message": {
            "result": result,
            "result_text": result_text,
            "count": count,
            "data": data
        }
    }


def format_response_sys(data=None, count=0, result=1, result_text=""):
    if data is None:
        data = []
    return {
        "message_sys": {
            "result": result,
            "result_text": result_text,
            "count": count,
            "data": data,
        }
    }


def format_response_page(message, result, status, timestamp):
    return {
        "message": message,
        "result": result,
        "status": status,
        "timestamp": timestamp
    }


# 举例 required_permissions = [1,2,3,4]
# 权限检查函数
def check_permission(required_permissions):
    """
    检查当前用户是否具有指定权限
    """
    current_user = get_jwt_identity()  # 获取当前用户的身份信息
    user = Zbfwbuser.query.get(current_user)
    if user:
        # 获取用户的所有角色
        user_roles = Zbfwbuserrole.query.filter_by(uid=user.t_zbfwb_user_id).all()
        roles = [role.rid for role in user_roles]

        # 获取角色权限
        role_permissions = Zbfwbroleperm.query.filter(Zbfwbroleperm.rid.in_(roles)).all()
        permissions = [perm.pid for perm in role_permissions]

        # 检查用户是否拥有至少一个权限
        if any(permission in permissions for permission in required_permissions):
            return True
        else:
            return False
    return False


# get_jwt_identity(): 获取当前用户的身份信息（通常是用户的 ID）。
# Zbfwbuser.query.get(current_user): 根据用户 ID 查询用户对象。
# Zbfwbuserrole.query.filter_by(uid=user.t_zbfwb_user_id).all(): 查询用户的所有角色。
# roles = [role.rid for role in user_roles]: 提取用户的所有角色 ID。
# any(role in roles for role in required_roles): 检查用户是否拥有至少一个所需角色。

# 假设你需要检查用户是否拥有角色 admin 或 editor，可以这样调用：
# required_roles = [1, 2]  # 假设 1 是 admin 的角色 ID，2 是 editor 的角色 ID
# if check_roles(required_roles):
#     print("用户拥有所需角色")
# else:
#     print("用户没有所需角色")
def check_roles(required_roles):
    """
    检查当前用户是否具有指定角色
    :param required_roles: 需要的角色列表
    :return: 如果用户拥有至少一个所需角色，返回 True；否则返回 False
    """
    current_user = get_jwt_identity()  # 获取当前用户的身份信息
    user = Zbfwbuser.query.get(current_user)
    if user:
        # 获取用户的所有角色
        user_roles = Zbfwbuserrole.query.filter_by(uid=user.t_zbfwb_user_id).all()
        roles = [role.rid for role in user_roles]

        # 检查用户是否拥有至少一个所需角色
        if any(role in roles for role in required_roles):
            return True
        else:
            return False
    return False


def check_simple_roles(required_roles: Union[List[str], List[int]]) -> bool:
    """
    检查当前用户是否拥有至少一个所需角色
    :param required_roles: 需要的角色列表，可以是字符串或整数类型
    :return: 如果用户拥有至少一个所需角色，返回 True；否则返回 False
    """
    try:
        # 获取 JWT 数据
        jwt_data = get_jwt()

        # 确保 roles 是列表类型
        roles = jwt_data.get('roles', [])
        if not isinstance(roles, list):
            roles = []

        # 确保 required_roles 是列表类型
        if not isinstance(required_roles, list):
            required_roles = []

        # 检查用户是否拥有至少一个所需角色
        return any(role in roles for role in required_roles)

    except Exception as e:
        # 记录异常日志（可选）
        print(f"Error in check_simple_roles: {e}")
        return False
